home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_12_05
/
adams
/
tempvec.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1994-03-02
|
5KB
|
112 lines
Listing 3. Vector and TempVector with dynamic VES
class TempVector;
class Vector // Vector class definition
{ unsigned lng; // Vector Length
double *ves; // Vector Element Space
public:
friend TempVector;
Vector () // Default Constructor
{ lng = 0; // No VES
ves = NULL; }
Vector (const unsigned ln) // New Vector Constructor
{ lng = ln; // Set length
ves = new double [ln]; } // Create new VES
Vector (const Vector& v) // Copy Constructor
{ lng = v.lng; // Set length
ves = new double [lng]; // Create new VES
memcpy (ves, v.ves, lng * sizeof(double)); }
Vector (TempVector&); // Typecast "Copy" Constructor
~Vector () { if (ves != NULL) delete ves; } // Destructor
double& operator()(const int coordinate) const
{ // Address elements by coordinate
return ves[coordinate]; }
unsigned length() const { return lng; } // Report Vector length
Vector& operator= (const Vector& v); // Assignment operator
Vector& operator= (TempVector& v); // Assignement operator
TempVector operator+ (const Vector&) const; // Vector Addition
TempVector operator+ (const TempVector&) const; // Vector Addition
friend TempVector unit (const Vector&); // Unitize Vector
};
class TempVector // Temporary Vector class definition
{ unsigned lng; // Vector Length
double *ves; // Vector Element Space
friend Vector;
TempVector () // Default Constructor
{ lng = 0; // No VES
ves = NULL; }
TempVector (const unsigned ln) // New TempVector Constructor
{ lng = ln; // Set length
ves = new double [ln]; } // Allocate new VES
TempVector (TempVector& v) // Copy Constructor
{ lng = v.lng; // Set length
ves = v.ves; // Seize VES
v.ves = NULL; }
unsigned length() const { return lng; } // Report Vector length
public:
~TempVector () { if (ves != NULL) delete ves; } // Destructor
double& operator()(const int coordinate) const
{ // Address elements by coordinate
return ves[coordinate]; }
friend TempVector unit (const Vector&) // Unitize Vector
friend TempVector unit (const TempVector&); // Unitize Vector
// No assignment operator
friend Vector::Vector (TempVector&);
TempVector operator+ (const Vector&) const; // Vector Addition
TempVector operator+ (const TempVector&) const; // Vector Addition
friend TempVector Vector::operator+ (const TempVector&);
};
Vector::Vector (TempVector& v)
{ // Typecast "Copy" Constructor from TempVector to Vector
ves = v.ves; // Seize VES
v.ves = NULL;
lng = v.lng; } // Set Vector length
Vector& Vector::operator= (const Vector& v)
{ // Assignment operator
if (ves != v.ves) { // Protect against self-reference
if (ves != NULL) delete ves; // Delete VES, if any
lng = v.lng; // Set Vector length
ves = new double [lng]; // Allocate new VES & copy
memcpy (ves, v.ves, lng * sizeof(double)); }
return *this; }
Vector& Vector::operator= (TempVector& v)
{ // Assignment operator
// No danger of self-reference
if (ves != NULL) delete ves; // Delete VES, if any
lng = v.lng; // Set Vector length
ves = v.ves; // Seize VES
v.ves = NULL;
return *this; }
TempVector Vector::operator+ (const Vector& v) const
{ // Vector addition
if (v.lng != lng) exit(1); // Ensure conformal addition
TempVector u (lng); // Create same size Vector
for (int i = 0; i < lng; i++) // Carry out addition
u.ves[i] = ves[i] + v.ves[i];
return u; }
TempVector Vector::operator+ (const TempVector& v) const
{ // Vector addition
if (v.lng != lng) exit(1); // Ensure conformal addition
TempVector u (lng); // Create same size Vector
for (int i = 0; i < lng; i++) // Carry out addition
u.ves[i] = ves[i] + v.ves[i];
return u; }
TempVector TempVector::operator+ (const Vector& v) const
{ // Vector addition
if (v.lng != lng) exit(1); // Ensure conformal addition
TempVector u (lng); // Create same size Vector
for (int i = 0; i < lng; i++) // Carry out addition
u.ves[i] = ves[i] + v.ves[i];
return u; }
TempVector TempVector::operator+ (const TempVector& v) const
{ // Vector addition
if (v.lng != lng) exit(1); // Ensure conformal addition
TempVector u (lng); // Create same size Vector
for (int i = 0; i < lng; i++) // Carry out addition
u.ves[i] = ves[i] + v.ves[i];
return u; }